package com.hzk.utils;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.hzk.pojo.UserBasic;
import com.hzk.vo.RespBean;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.RandomAccessFile;
import java.net.HttpURLConnection;
import java.net.URL;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
/**
 * 生成用户工具类
 *
 * @author zhoubin
 * @since 1.0.0
 */
public class UserUtils {
  private static void createUser(int count) throws Exception {
   List<UserBasic> users = new ArrayList<>(count);
   //生成用户
   for (int i = 0; i < count; i++) {
     UserBasic user = new UserBasic();
     user.setId(13000000000L + i);
     user.setLoginCount(1);
     user.setUsername("user" + i);
     user.setRegisterDate(new Date());
     user.setSalt("1a2b3c");
     user.setPassword(MD5Util.inputPassToDBPass("123456", user.getSalt()));
     users.add(user);
   }
   System.out.println("create user");
   //插入数据库
   Connection conn = getConn();
   String sql = "insert into seckill.user_basic(login_count, username, register_date,salt, password, id)values(?,?,?,?,?,?)";
   PreparedStatement pstmt = conn.prepareStatement(sql);
   for (int i = 0; i < users.size(); i++) {
     UserBasic user = users.get(i);
     pstmt.setInt(1, user.getLoginCount());
     pstmt.setString(2, user.getUsername());
     pstmt.setTimestamp(3, new Timestamp(user.getRegisterDate().getTime()));
     pstmt.setString(4, user.getSalt());
     pstmt.setString(5, user.getPassword());
     pstmt.setLong(6, user.getId());
     pstmt.addBatch();
   }
   /*pstmt.executeBatch();*/
   pstmt.close();
   conn.close();
   System.out.println("insert to db");
   //登录，生成token
   String urlString = "http://localhost:9092/login/doLogin";
   File file = new File("D:\\config.txt");
   if (file.exists()) {
     file.delete();
   }
   RandomAccessFile raf = new RandomAccessFile(file, "rw");
   file.createNewFile();
   raf.seek(0);
   for (int i = 0; i < users.size(); i++) {
     UserBasic user = users.get(i);
     URL url = new URL(urlString);
     HttpURLConnection co = (HttpURLConnection) url.openConnection();
     co.setRequestMethod("POST");
     co.setDoOutput(true);
     OutputStream out = co.getOutputStream();
     String params = "mobile=" + user.getId() + "&password=" +
                    MD5Util.inputPassToFromPass("123456");
     out.write(params.getBytes());
     out.flush();
     InputStream inputStream = co.getInputStream();
     ByteArrayOutputStream bout = new ByteArrayOutputStream();
     byte buff[] = new byte[1024];
     int len = 0;
     while ((len = inputStream.read(buff)) >= 0) {
      bout.write(buff, 0, len);
     }
     inputStream.close();
     bout.close();
     String response = new String(bout.toByteArray());
     ObjectMapper mapper = new ObjectMapper();
     RespBean respBean = mapper.readValue(response, RespBean.class);
     String userTicket = ((String) respBean.getObj());
     System.out.println("create userTicket : " + user.getId());
     String row = user.getId() + "," + userTicket;
     raf.seek(raf.length());
     raf.write(row.getBytes());
     System.out.println(row.getBytes());
     raf.write("\r\n".getBytes());
     System.out.println("write to file : " + user.getId());
   }
   raf.close();
   System.out.println("over");
  }
  private static Connection getConn() throws Exception {
   String url = "jdbc:mysql://192.168.86.130:3306/seckill?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai";
   String username = "mysql";
   String password = "123456";
   String driver = "com.mysql.cj.jdbc.Driver";
   Class.forName(driver);
   return DriverManager.getConnection(url, username, password);
  }
  public static void main(String[] args) throws Exception {
   createUser(16000);
  }
}
